package weibo.database;
import java.sql.*;
import java.sql.Date;
import java.util.*;

import weibo.database.ConnectionTools;
import weibo.model.UserMod;
/*
 * 用户数据库操作
 */
public class UserDB {
	private static Connection conn=null;
	
	public UserDB(){
		ConnectionTools tools=new ConnectionTools();
		conn=tools.getConn();
	}
	/*
	 * 添加用户
	 * @param UserMod
	 * @return boolean
	 */
	public boolean CreateUser(UserMod user){
		String sql="insert into user"
				+ "(login_name,user_name,password,borndate,sex,simple,create_date)"
				+ "values"
				+ "(?,?,?,?,?,?,NOW())";
		try {
			PreparedStatement exec=conn.prepareStatement(sql);
			String borndates=user.getBorndate();
			
			if (borndates!=""){
				java.sql.Date borndate=java.sql.Date.valueOf(borndates);
				exec.setDate(4, borndate);
			}else{
				exec.setDate(4,null);
			}
			exec.setString(1, user.getLogin_name());
			exec.setString(2, user.getUser_name());
			exec.setString(3, user.getPassword());
			exec.setString(5, user.getSex());
			exec.setString(6, user.getSimple());
			int change=exec.executeUpdate();
			if (change==1){
				conn.close();
				return true;
			}else{
				conn.close();
				return false;
			}
			
			
		} catch (Exception e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
			return false;
		}
	}
	/*
	 * 用户登录
	 * @param login_name,password
	 * @return UserMod
	 */
	public List<UserMod> UserLogin(String login_name,String password){
		String sql="select * from user where login_name=? and password=?";
		PreparedStatement exec;
		
		try {
			exec = conn.prepareStatement(sql);
			exec.setString(1,login_name);
			exec.setString(2,password);
			ResultSet res=exec.executeQuery();
			List<UserMod> UserList=new ArrayList<UserMod>();
			while(res.next()){
				UserList=new ArrayList<UserMod>();
				String borndate="";
				if (res.getDate("borndate")!=null){
					borndate=res.getDate("borndate").toString();
				}
				UserList.add(new UserMod(
						res.getInt("userid"),
						res.getString("login_name"),
						res.getString("user_name"),
						res.getString("password"),
						borndate,
						res.getString("sex"),
						res.getString("simple"),
						res.getDate("create_date").toString(),
						res.getString("user_head")));
			}
			conn.close();
			return UserList;
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
			return null;
		}
	
			
		
	}
	
	/*
	 * 用户信息更新
	 * @param List<UserMod>
	 * @return boolean
	 * 
	 */
	public boolean UserUpdate(List<UserMod> user){
		String sql="update user "
				+ "set "
				+ "user_name=? ,borndate=?,sex=?,simple=? "
				+ "where userid=?";
		try {
			PreparedStatement exec=conn.prepareStatement(sql);
			String borndate=user.get(0).getBorndate();
			if (borndate==null || borndate==""){
				exec.setDate(2,null);
			}else{
				java.sql.Date date=java.sql.Date.valueOf(borndate);
				exec.setDate(2,date);
			}
			exec.setString(1,user.get(0).getUser_name());
			
			exec.setString(3,user.get(0).getSex());
			exec.setString(4,user.get(0).getSimple());
			//exec.setString(5,user.get(0).getUser_head());
			exec.setInt(5,user.get(0).getUserid());
			int result=exec.executeUpdate();
			if (result==1){
				conn.close();
				return true;
			}else if (result>1){
				conn.rollback();
				//此次操作出现多个更改，可能是SQL注入，所以发现就回滚操作。
				conn.close();
				return false;
			}else{
				conn.close();
				return false;
			}
			
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
			return false;
		}
	}
	/*
	 * 修改用户密码
	 * @param userid , password
	 * @return boolean
	 * 
	 */
	public boolean UserChangePassword(int userid,String password){
		String sql="update user "
				+ "set "
				+ "password=MD5(?) "
				+ "where userid=?";
		try {
			PreparedStatement exec=conn.prepareStatement(sql);
			exec.setString(1,password);
			exec.setInt(2,userid);
			int result=exec.executeUpdate();
			if (result==1){
				conn.close();
				return true;
			}else if (result>1){
				conn.rollback();
				//此次操作出现多个更改，可能是SQL注入，所以发现就回滚操作。
				conn.close();
				return false;
			}else{
				conn.close();
				return false;
			}
			
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
			return false;
		}
	}
	
	
	/*
	 * 更新用户头像
	 * @param UserMod , URL
	 * @return boolean
	 */
	public boolean UpdateUserHead(List<UserMod> user,String URL){
		String sql="update user set user_head=? where userid=?";
		try {
			PreparedStatement exec=conn.prepareStatement(sql);
			exec.setString(1, URL);
			exec.setInt(2, user.get(0).getUserid());
			int result=exec.executeUpdate();
			if (result==1){
				conn.close();
				return true;
			}else if(result>1){
				conn.rollback();
				//更改太多异常，回滚
				conn.close();
				return false;
			}else{
				conn.close();
				return false;
			}
			
		} catch (SQLException e1) {
			// TODO 自动生成的 catch 块
			e1.printStackTrace();
			return false;
		}
		
	}
	
	/*
	 * 用户信息获取
	 * @param userid
	 * @return UserMod
	 */
	public List<UserMod> QuerySimpleUserInfo(int userid){
		String sql="select * from user where userid=?";
		List<UserMod> user= new ArrayList<UserMod>();
		try {
			java.sql.PreparedStatement exec=conn.prepareStatement(sql);
			exec.setInt(1, userid);
			ResultSet res=exec.executeQuery();
			res.next();
			String bdate="";
			if (res.getDate("borndate")!=null){
				bdate=res.getDate("borndate").toString();
			}
			user.add(new UserMod(
					res.getInt("userid"),
					res.getString("login_name"),
					res.getString("user_name"),
					null,
					bdate,
					res.getString("sex"),
					res.getString("simple"),
					res.getDate("create_date").toString(),
					res.getString("user_head")));
			return user;
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
			return null;
		}
	}
	/*
	 * 总用户数
	 */
	public int QueryUserCount(){
		String sql="SELECT COUNT(userid) as total FROM user";
		try {
			java.sql.PreparedStatement exec=conn.prepareStatement(sql);
			ResultSet res=exec.executeQuery();
			res.next();
			conn.close();
			return res.getInt("total");
		} catch (Exception e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
			return -1;
		}
	}
	/*
	 * 用户信息获取(列表)
	 * @param userid len
	 * @return UserMod
	 */
	public List<UserMod> QueryUserInfoCount(int userid,int len){
		String sql="SELECT * FROM user WHERE userid<? ORDER BY userid DESC LIMIT 0,?";
		List<UserMod> user= new ArrayList<UserMod>();
		try {
			java.sql.PreparedStatement exec=conn.prepareStatement(sql);
			exec.setInt(1, userid);
			exec.setInt(2, len);
			ResultSet res=exec.executeQuery();
			while(res.next()){
				String bdate="";
				if (res.getDate("borndate")!=null){
					bdate=res.getDate("borndate").toString();
				}
				user.add(new UserMod(
						res.getInt("userid"),
						res.getString("login_name"),
						res.getString("user_name"),
						"",
						bdate,
						res.getString("sex"),
						res.getString("simple"),
						res.getDate("create_date").toString(),
						res.getString("user_head")));
				
			}
			conn.close();
			return user;
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
			return null;
		}
	}
	/*
	 * 用户信息获取(最新10条)
	 * @param 
	 * @return UserMod
	 */
	public List<UserMod> QueryUserInfoNew(){
		String sql="SELECT * FROM user ORDER BY userid DESC LIMIT 0,10";
		List<UserMod> user= new ArrayList<UserMod>();
		try {
			java.sql.PreparedStatement exec=conn.prepareStatement(sql);
			ResultSet res=exec.executeQuery();
			while(res.next()){
				String bdate="";
				if (res.getDate("borndate")!=null){
					bdate=res.getDate("borndate").toString();
				}
				user.add(new UserMod(
						res.getInt("userid"),
						res.getString("login_name"),
						res.getString("user_name"),
						"",
						bdate,
						res.getString("sex"),
						res.getString("simple"),
						res.getDate("create_date").toString(),
						res.getString("user_head")));
			}
			conn.close();
			return user;
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
			return null;
		}
	}
	/*
	 * 删除用户
	 * @param userid
	 * @return boolean
	 * 
	 */
	public boolean DeleteUser(int userid){
		String sql="DELETE FROM user WHERE userid=?";
		try {
			PreparedStatement exec=conn.prepareStatement(sql);
			exec.setInt(1,userid);
			int result=exec.executeUpdate();
			if (result==1){
				conn.close();
				return true;
			}else if (result>1){
				conn.rollback();
				//此次操作出现多个更改，可能是SQL注入，所以发现就回滚操作。
				conn.close();
				return false;
			}else{
				conn.close();
				return false;
			}
			
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
			return false;
		}
	}
}